import { Service } from 'egg';
import { IGetNewsListParams, IHttpGetParams, INewsData, IPageData } from '../../typings';
import { getPageData } from '../lib/utils';

/**
 * 新闻列表查询
 * 请求示例：http://v.juhe.cn/toutiao/index?type=top&key=APPKEY
 * 接口参数：{
 *   type: string, (top(推荐,默认),guonei(国内)...)
 *   pageNum: number,
 *   count: number
 * }
 */
export default class Api extends Service {
  public async getNewsList({ type, pageNum, count }: IGetNewsListParams): Promise<IPageData<INewsData>> {
    const { ctx } = this;

    //设置默认值
    const pageNumber: number = pageNum || 0;
    const pageCount: number = count || 10;

    return ctx.httpGet(<IHttpGetParams>{
      url: ctx.app.config.API.GET_NEWS_LIST,
      data: {
        //没有传入时默认为top
        type: type || 'top'
      },
      success(data){
        //对拿到的所有列表数据进行处理(根据页码和数量显示分页条数)
        //<INewsData>是泛型，调用函数的时候传入函数内部的变量类型
        return getPageData<INewsData>(data, pageNumber, pageCount);
      },
      fail(err){
        throw new Error('Request failed' + err);
      }
    });

  }
}
